/***
3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵，其中每行，每列以及两条对角线上的各数之和都相等。
给定一个由整数组成的 grid，其中有多少个 3 × 3 的 “幻方” 子矩阵？（每个子矩阵都是连续的）。
示例：
输入: [[4,3,8,4],
      [9,5,1,9],
      [2,7,6,2]]
输出: 1
解释: 
下面的子矩阵是一个 3 x 3 的幻方：
438
951
276
而这一个不是：
384
519
762
总的来说，在本示例所给定的矩阵中只有一个 3 x 3 的幻方子矩阵。
提示:
    1 <= grid.length <= 10
    1 <= grid[0].length <= 10
    0 <= grid[i][j] <= 15
**/
/*
 * @Author:gxx
 * @Date: 2021-03-29 18:56:26
 * @Last Modified by: gxx
 * @Last Modified time: 2021-03-29 18:56:26
 * @Description: 矩阵中的幻方
*/
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;


class Solution {
public:
    int numMagicSquaresInside(vector<vector<int>>& grid) {
        int a[9];
        int cols = grid[0].size();
        int rows = grid.size();
        int len = cols - 2;
        for(int j = 0; j < rows -2;j++){
            for(int i = 0; i < len;i++){    
                a[0] = grid[j][i] +grid[j][i+1]+grid[j][i+2];
                a[1] = grid[j+1][i] +grid[j+1][i+1]+grid[j+1][i+2];
                a[2] = grid[j+2][i] +grid[j+2][i+1]+grid[j+2][i+2];
                a[3] = grid[j][i] +grid[j+1][i]+grid[j+2][i];
                a[4] = grid[j][i+1] +grid[j+1][i+1]+grid[j+2][i+1];
                a[5] = grid[j][i+2] +grid[j+1][i+2]+grid[j+2][i+2];
                a[6] = grid[j][i] +grid[j+1][i+1]+grid[j+2][i+2];
                a[7] = grid[j+2][i] +grid[j+1][i+1]+grid[j][i+2];
                if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[3]==a[4] \
                &&a[0]==a[5]&&a[1]==a[6]&&a[2]==a[7])
                {cout <<1<<endl;
                return 1;}
                else return -1;
            }
        }


    }
};